package exception;
/*面试常见问题：
1、请分别说明final  finally  finalize是什么
final可以修饰类、方法、变量（不能被继承、不能被重写、不能修改值）
finally是异常处理机制，不管有无异常，都要执行
finalize  是Object定义的一个方法
当GC扫描发现一个对象不再引用时，会将其释放，释放前会调用该方法
该方法是一个对象生命周期中的最后一个方法，调用完毕后该对象就会被GC清除
 */
public class FinallyDemo03 {
    public static void main(String[] args) {
        System.out.println(test("0") + "," + test(null) + "," + test(""));//3,3,3
        //如果没有finally语句块的话，输出结果就是0，1，2
        //有finally后输出结果就变成了3，3，3
        //原因是有return语句，return一方面是返回一个数据，另外一个意思是结束语句块
        //当传入“0”后，return 0，结束语句块，然后执行finally语句块，return 3，就把 0 的值修改为了 3
        //同样道理，后续也都把结果输出为了 3
    }
    public static int test(String str){
        try{
            return str.charAt(0)-'0';
        }catch (NullPointerException e){
            return 1;
        }catch (Exception e){
            return 2;
        }finally {
            return 3;
        }
    }
}
